package com.jic.purchase.controller;
import com.jic.common.base.vo.PageResult;
import com.jic.purchase.constant.consist.ResponseCode;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.BeanUtils;
import com.github.pagehelper.PageInfo;
import java.util.List;
import java.util.stream.Collectors;
import com.jic.common.base.vo.RestResult;
import lombok.extern.slf4j.Slf4j;
import com.alibaba.fastjson.JSONObject;
import com.jic.purchase.model.vo.request.InvoicePaymentInfoRequest;
import com.jic.purchase.model.vo.response.InvoicePaymentInfoResponse;
import com.jic.purchase.model.entity.InvoicePaymentInfo;
import com.jic.purchase.service.InvoicePaymentInfoService;
/**
 * @Author: 建投数据科技(山东)有限公司 
 * @date: 2020-05-28 15:28:18
 */
 @RestController
 @Slf4j
 @RequestMapping("/invoicePaymentInfo")
 @Api(tags = " [发票&付款信息]控制类-PC")
public class InvoicePaymentInfoController {
	@Autowired
	private InvoicePaymentInfoService service;
	
	/**
	 * 新增记录
	 * @param request 新增[发票&付款信息]请求参数
	 * @return InvoicePaymentInfoResponse 新增[发票&付款信息]响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	@ApiOperation(value = "新增[发票&付款信息]记录")
	@PostMapping("/save")
	@ResponseBody
	public RestResult<Long> save(@RequestBody InvoicePaymentInfoRequest request) throws Throwable {
			InvoicePaymentInfo invoicePaymentInfo = new InvoicePaymentInfo();
			BeanUtils.copyProperties(request, invoicePaymentInfo);
		long flag = service.save(invoicePaymentInfo);
	 return RestResult.success(flag);
	}
	/**
	 * 新增或修改记录
	 * @param request 新增或修改[发票&付款信息]请求参数
	 * @return InvoicePaymentInfoResponse 新增或修改[发票&付款信息]响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	@ApiOperation(value = "保存或更新[发票&付款信息]")
	@PostMapping("/saveOrUpdate")
	 @ResponseBody
	public RestResult<Long> saveOrUpdate(@Validated @RequestBody InvoicePaymentInfoRequest request) throws Throwable {
			InvoicePaymentInfo invoicePaymentInfo = new InvoicePaymentInfo();
			BeanUtils.copyProperties(request, invoicePaymentInfo);
		long flag =   service.saveOrUpdate(invoicePaymentInfo);
	 return RestResult.success(flag);
	}
	/**
	 * 删除记录
	 * @param request 删除[发票&付款信息]请求参数
	 * @return InvoicePaymentInfoResponse 删除[发票&付款信息]响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	@ApiOperation(value = "删除[发票&付款信息]记录")
	@PostMapping("/delete")
	@ResponseBody
	public RestResult<Long> delete(@RequestBody InvoicePaymentInfoRequest request) throws Throwable {
			InvoicePaymentInfo invoicePaymentInfo = new InvoicePaymentInfo();
			BeanUtils.copyProperties(request, invoicePaymentInfo);
		long flag = service.deleteByPrimaryKeyLogically(invoicePaymentInfo);
	 return RestResult.success(flag);
	}
	/**
	 * 修改记录
	 * @param request 修改[发票&付款信息]请求参数
	 * @return InvoicePaymentInfoResponse 修改[发票&付款信息]响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	@ApiOperation(value = "修改[发票&付款信息]记录")
	@PostMapping("/update")
	@ResponseBody
	public RestResult<Long> update(@RequestBody InvoicePaymentInfoRequest request) throws Throwable {
			InvoicePaymentInfo invoicePaymentInfo = new InvoicePaymentInfo();
			BeanUtils.copyProperties(request, invoicePaymentInfo);
		long flag = service.updateByPrimaryKeySelective(invoicePaymentInfo);
	 return RestResult.success(flag);
	}
	/**
	 * 单表查询详情信息
	 * @param request 查询[发票&付款信息]详情请求参数
	 * @return InvoicePaymentInfoResponse 查询[发票&付款信息]详情响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	 @PostMapping("/getByPrimaryKey")
	 @ApiOperation(value = "查询[发票&付款信息]详情")
	 @ResponseBody
	public RestResult<InvoicePaymentInfoResponse> getByPrimaryKey(@Validated  @RequestBody InvoicePaymentInfoRequest request) {
		log.info("查询详情请求参数入参，{}", JSONObject.toJSONString(request));
		if (request!=null && request.getId()!=null) {

			InvoicePaymentInfo invoicePaymentInfo = new InvoicePaymentInfo();
			BeanUtils.copyProperties(request, invoicePaymentInfo);
			InvoicePaymentInfo result = service.getByPrimaryKey(invoicePaymentInfo);
			log.info("查询详情请求参数出参，{}", JSONObject.toJSONString(result));
			if (result == null) {
				return RestResult.error(ResponseCode.EXCEPTION, "记录不存在");
			}
			InvoicePaymentInfoResponse bo = new InvoicePaymentInfoResponse();
			BeanUtils.copyProperties(result, bo);
			return RestResult.success(bo);
		}
		log.info("查询详情请求结束");
		return RestResult.success(new InvoicePaymentInfoResponse());
	}
	 /**
		 * 分页查询
		*
		* @param request 分页查询请求参数
		* @return 分页列表
		  * @throws Throwable 业务异常和系统异常
		 */
	@PostMapping("/listPage")
	@ApiOperation(value = " 分页查询列表 ")
	@ResponseBody
	public RestResult<PageResult<InvoicePaymentInfo>> listPage (@RequestBody InvoicePaymentInfoRequest request) throws Throwable {
	 InvoicePaymentInfo param = new InvoicePaymentInfo();
	 BeanUtils.copyProperties(request, param);
		param.setDeleteFlag(0);
	return RestResult.success(service.listPageBySelective(param, request.getPageNum(), request.getPageSize()));
	}

	/**
		 * INVOICE_PAYMENT_INFO 查询列表（不分页）
		 * @param  request 前端请求参数
	 */
	 @PostMapping("/listAll")
	 @ApiOperation(value = "不分页查询 [发票&付款信息] ")
	 @ResponseBody
	 public RestResult<List<InvoicePaymentInfoResponse>>  listInvoicePaymentInfoAllRecord(@RequestBody InvoicePaymentInfoRequest request) throws Throwable {
			InvoicePaymentInfo invoicePaymentInfo = new InvoicePaymentInfo();
			BeanUtils.copyProperties(request, invoicePaymentInfo);
			invoicePaymentInfo.setDeleteFlag(0);
			List<InvoicePaymentInfo> list = service.listAllRecord(invoicePaymentInfo);
				List<InvoicePaymentInfoResponse> responseList = list.stream().map(temp -> {
				InvoicePaymentInfoResponse bo = new InvoicePaymentInfoResponse();
				BeanUtils.copyProperties(temp, bo);
				return bo;
				}).filter(item -> item != null).collect(Collectors.toList());
			return RestResult.success(responseList);
	}

}

